package com.op.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.base.MPJBaseService;
import com.op.entity.User;
import com.op.model.vo.UserInfoVO;
import io.minio.errors.MinioException;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.List;

/**
 * (User)表服务接口
 *
 * @author 孤焰
 * @since 2021-09-28 19:53:56
 */
public interface UserService extends MPJBaseService<User> {
    /**
     * 检查value是否合法
     * @param id 主键id
     * @param value 待检查字符串
     * @return 检查结果
     */
    boolean check(Long id, String value);

    /**
     * 登录
     * @param username 用户名或邮箱
     * @param password 密码
     * @return 数据库中的实体用户
     * @throws Exception
     */
    User login(String username, String password) throws Exception;

    /**
     * 修改密码
     * @param user 修改用户实体
     * @return 修改结果
     */
    boolean changePassword(User user);

    /**
     * 分页条件查询
     * @param page 分页实体
     * @param user 实体数据
     * @return 当前页数据
     */
    Page<UserInfoVO> page(Page<UserInfoVO> page, User user);

    /**
     * 查询未审批的用户个数
     * @return 未审批的用户个数
     */
    Integer notReview();

    /**
     * 添加或修改
     * @param user 用户实体
     * @param avatar 头像文件
     * @return 添加或修改结果
     * @throws MinioException
     * @throws NoSuchAlgorithmException
     * @throws InvalidKeyException
     * @throws IOException
     */
    boolean saveOrUpdate(User user, MultipartFile avatar) throws MinioException, NoSuchAlgorithmException, InvalidKeyException, IOException;

    /**
     * 批量逻辑删除
     * @param idList id列表
     * @return 删除结果
     */
    boolean logicDelBatchById(List<Long> idList);

    /**
     * 向redis中注册临时用户
     * @param user 实体对象
     * @return 注册结果
     */
    boolean registerTempAccount(User user);

    /**
     * 根据roleId判断用户是否存在
     * @param roleId 角色Id
     * @return true - 存在 false - 不存在
     */
    boolean existUserByRoleId(Long roleId);
}

